package com.training.admin.service;

import java.util.List;

import com.demo2do.core.entity.page.Page;
import com.demo2do.core.persistence.support.QueryFilter;
import com.training.admin.dto.ProjectDateRquest;
import com.training.admin.entity.category.TrainingCategory;
import com.training.admin.entity.department.Department;
import com.training.admin.entity.project.Project;
import com.training.admin.entity.project.ProjectPhase;
import com.training.admin.entity.search.ProjectDataSearch;

/**
 * 
 * @author Rockett
 *
 */
public interface ProjectDataService extends DataService<Project> {

	/**
	 *
	 * @param queryFilter
	 * @return
	 */
	public int countAll(QueryFilter queryFilter);

	/**
	 * 
	 * @param login
	 * @return
	 */
	public int count(Long departmentId);

	/**
	 * 
	 * @param login
	 * @param page
	 * @return
	 */
	public List<Project> list(Long departmentId, Page page);

	/**
	 * 
	 * @param department
	 * @return
	 */
	public List<Project> onSearch(Long departmentId, ProjectDataSearch projectDataSearch, Page page);

	/**
	 * 
	 * @param departmentId
	 * @param projectDataSearch
	 * @return
	 */
	public int count(Long departmentId, ProjectDataSearch projectDataSearch);

	/**
	 * 
	 * @param project
	 * @return
	 */
	public Project createProject(Project project);

	/**
	 * 
	 * @param beginDate
	 * @param endDate
	 */
	public void editPhasesDate(Long id, ProjectDateRquest projectDateRquest);

	/**
	 * 
	 * @param id
	 */
	public void delete(Long id);
	
	/**
	 * 
	 * @param id
	 */
	public void copy(Long id);

	/**
	 * 
	 * @param id
	 * @return
	 */
	public List<ProjectPhase> listProjectPhaseById(Long id);

	/**
	 * @param project
	 */
	public void updateProject(Project project);

	/**
	 * @param project
	 * @param firstCategory
	 * @param secondCategory
	 * @param department
	 */
	public void updateProject(Project project, TrainingCategory firstCategory, TrainingCategory secondCategory,
			Department department);
	
	/**
	 * 
	 * @return
	 */
	public List<Department> list(Long departmentId);
	
	
}
